<template>
	<view>
		<view class="">globalDataRouter</view>
		<view class="uni-form-item uni-column">
			<input :value="dataRef.a" class="uni-input" focus placeholder="自动获得焦点" />
		</view>
		<view class="">使用路由组件</view>
		<!-- 
			主要属性:
			url:值为相对路径或绝对路径， 注意不能加 .vue 后缀
			open-type: 跳转方式
				navigate	对应 uni.navigateTo 的功能	
				redirect	对应 uni.redirectTo 的功能	
				switchTab	对应 uni.switchTab 的功能	
				reLaunch	对应 uni.reLaunch 的功能	抖音小程序与飞书小程序不支持
				navigateBack	对应 uni.navigateBack 的功能	
				exit	退出小程序，target="miniProgram"时生效	微信2.1.0+、百度2.5.2+、QQ1.4.7+
			delta: 当 open-type 为 'navigateBack' 时有效，表示回退的层数
		-->
		<!-- 不携带参数 -->
		<!-- 保留当前页面，跳转到应用内的某个页面，使用uni.navigateBack可以返回到原页面。 -->
		<navigator open-type="navigate" url="/pages/globalDataRouter/globalDataRouter1">
			<button size="mini" type="default">去globalDataRouter1</button>
		</navigator>
		<!-- 关闭当前页面，跳转到应用内的某个页面。 -->
		<navigator open-type="redirect" url="/pages/globalDataRouter/globalDataRouter1">
			<button size="mini" type="default">删除当前页  重定向到xx页</button>
		</navigator>
		<!-- 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。 -->
		<navigator open-type="switchTab" url="/pages/tabBar/tabBar1">
			<button size="mini" type="default">跳到tab xxx页</button>
		</navigator>
		<!-- 关闭当前页面，返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈，决定需要返回几层 -->
		<navigator delta="1" open-type="navigateBack" url="/pages/globalDataRouter/globalDataRouter1">
			<button size="mini" type="default">返回1页</button>
		</navigator>
		<!-- 关闭所有页面，打开到应用内的某个页面。 -->
		<navigator open-type="reLaunch" url="/pages/globalDataRouter/globalDataRouter1">
			<button size="mini" type="default">关闭所有 reLaunch 打开某页</button>
		</navigator>
		
		<view class="">使用路由组件 携带参数</view>
		<!-- 通过url携带参数 -->
		<navigator url="/pages/globalDataRouter/globalDataRouter1?aaa=1111&bbb=2222">
			<button size="mini" type="default">去globalDataRouter1</button>
		</navigator>
		<!-- 通过url携带参数处理encode -->
		<!-- url有长度限制，太长的字符串会传递失败，可使用窗体通信、全局变量，或encodeURIComponent等多种方式解决，如下为encodeURIComponent示例  -->
		<navigator :url="'/pages/navigate/navigate?item='+ encodeURIComponent(JSON.stringify(encodeData))"></navigator>
		<view class="">使用API实现路由</view>
		
		<!-- 使用窗体通信 -->
		<button size="mini" type="default" @click="emitApi">scroll-top</button>
		
		<navigator url="/pages/index/index" open-type="switchTab"></navigator>
	</view>
</template>

<script setup>
	import {
		onBeforeMount,
		onMounted,
		onBeforeUpdate,
		onUpdated,
		onBeforeUnmount,
		onUnmounted,
		onActivated,
		onDeactivated,
		computed,
		ref
	} from "vue"
	import {onLoad,onReady,onShow,onHide,onUnload,onPageScroll} from "@dcloudio/uni-app"
	const dataRef = ref({
		a: '1111'
	})
	const encodeData = ref({
		a:1111,
		b:3333,
		c:{
			a:1111,
			b:2222,
		}
	})
	onLoad((option) => {
		console.log('globalDataRouter...onLoad...', option)
		// 路由跳转是 history栈中的页面状态事件还在(redirectTo / switchTab  / reLaunch  )
		uni.$on('globalDataRouterupdate',function(data){
			console.log('监听到事件来自globalDataRouter update ，携带参数 msg 为：' + JSON.stringify(data));
			// dataRef.value.a = data.inputVal;
		})
	})
	onReady((option) => {
		console.log('globalDataRouter...onReady...', option)
	})
	onShow((option) => {
		console.log('globalDataRouter...onShow...', option)
	})
	onHide((option) => {
		console.log('globalDataRouter...onHide...', option)
	})
	onUnload((option) => {
		console.log('globalDataRouter...onUnload...', option)
	})
	let emitApi = ()=>{
		
		
		uni.navigateTo({
		  url: '/pages/test?id=1',
		  events: {
		    // 为指定事件添加一个监听器，获取被打开页面传送到当前页面的数据
		    acceptDataFromOpenedPage: function(data) {
		      console.log(data)
		    },
		    someEvent: function(data) {
		      console.log(data)
		    }
		  },
		  success: function(res) {
		    // 通过eventChannel向被打开页面传送数据
		    res.eventChannel.emit('acceptDataFromOpenerPage', { inputVal: 'data from starter page' })
			// uni.$emit('globalDataRouterupdate',{msg:'页面更新', inputVal: '234232'})
		  }
		})
	}
</script>

<style lang="scss">
	.uni-form-item{
		padding: 4px 12px;
		background-color: gainsboro;
		margin: 2px;
		border-radius: 6px;
	}
</style>
